2017-02-20 28 views
-1

Я очень новичок в Java. Я должен иметь рамку с двумя кнопками. Первая кнопка позволяет пользователю просматривать изображение, и оно работает. Вторая кнопка должна задавать параметр с помощью диалогового окна, но он даже не отображается в кадре. Что я делаю неправильно? Пожалуйста, помогите. Поскольку я очень новичок в Java, если у вас есть какое-либо возможное решение, объясните, как я самый тупой человек в мире.Первая кнопка появляется на кадре, но вторая кнопка не находится в java

Редактировать: Я решил проблему глупо, но спасибо в любом случае. Я добавил setVisible (true) для кнопки2 и как-то это сработало. Странно то, что я не делал то же самое для кнопки, но все же он работает. Я не понял, но если он работает, это работает. Спасибо снова, надеюсь, что кто-то еще сможет получить решение из ваших ответов.

public class ImageBrowser extends JFrame { 

private static final long serialVersionUID = 1L; 
JButton button, button2; 
JLabel label; 

private int K; 
private int IFP; 



public ImageBrowser() { 
    super("Image Browser"); 

    button = new JButton("Browse"); 
    button.setBounds(200, 300, 90, 40); 
    label = new JLabel(); 
    label.setBounds(10, 10, 256, 256); 
    button2 = new JButton("Parameters"); 
    button2.setBounds(500, 300, 150, 40); 

    add(button); 
    add(label); 
    add(button2); 

    button.addActionListener(new ActionListener() { 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      // textArea.setText(""); 
      JFileChooser file = new JFileChooser(); 
      file.setCurrentDirectory(new File(System 
        .getProperty("user.home"))); 
      // filter the files 
      FileNameExtensionFilter filter = new FileNameExtensionFilter(
        "*.Images", "jpg", "gif", "png", "tif"); 
      file.addChoosableFileFilter(filter); 
      int result = file.showOpenDialog(null); 

      if (result == JFileChooser.APPROVE_OPTION) { 

       File selectedFile = file.getSelectedFile(); 

       String path = selectedFile.getAbsolutePath(); 
       label.setIcon(ResizeImage(path)); 
       getPixels(selectedFile); 
      } 

      else if (result == JFileChooser.CANCEL_OPTION) { 
       System.out.println("No File Select"); 
      } 

     } 
    }); 

    button2.addActionListener(new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      String input = JOptionPane 
        .showInputDialog("Please input Parameter k"); 
      if (input == null) 
       return; 
      int K = Integer.parseInt(input.trim()); 

      input = JOptionPane 
        .showInputDialog("Please input Parameter ifp"); 
      if (input == null) 
       return; 
      int IFK = Integer.parseInt(input.trim()); 

     } 
    }); 
    setLayout(null); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setLocation(100, 100); 
    setSize(700, 400); 
    setVisible(true); 
} 


public static void main(String[] args) throws IOException { 
    new ImageBrowser(); 

} 

} 
+0

Этот код работает для меня. –

+1

Java GUI должны работать с различными ОС, размером экрана, разрешением экрана и т. Д., Используя разные PLAF в разных локалях. Таким образом, они не способствуют идеальной компоновке пикселей. Вместо этого используйте диспетчеры макетов или [их комбинации] (http://stackoverflow.com/a/5630271/418556), а также макет и границы для [пробела] (http://stackoverflow.com/a/17874718/ 418556). –

+1

1) Обеспечьте ASCII-искусство или простой рисунок * предназначенного макета GUI при минимальном размере и, если он изменен, с большей шириной и высотой. 2) Чтобы лучше помочь, опубликуйте [MCVE] или [Short, Self Contained, Correct Example] (http://www.sscce.org/). (Похоже, что прослушиватели действий, а также методы 'getPixels (..)' и 'ResizeImage (..)' не имеют отношения к проблеме компоновки. 3) Изучите общую номенклатуру Java (соглашения об именах - например, 'EveryWordUpperCaseClass' , 'firstWordLowerCaseMethod()', 'firstWordLowerCaseAttribute', если это не' UPPER_CASE_CONSTANT') и использовать его последовательно ... –

ответ

4

Вы можете установить расположение обнулить поэтому у вас есть абсолютное позиционирование и ваши компоненты перекрывают друг друга

setLayout(null); 

Вы можете попробовать другой менеджер компоновки для примера FlowLayout:

setLayout(new FlowLayout()); 

Here у вас есть описания менеджеров макетов

+0

Глядя на координаты, я не вижу, как они будут перекрываться? –

+1

@SteveSmith Существует множество причин, по которым не следует использовать «нулевые» макеты. –

+0

Согласен, но этот ответ, похоже, не решил проблему. Компоненты не перекрывают AFAIKS. –