2016-08-03 4 views
0

Я пытаюсь создать графический интерфейс на основе BorderLayout и GridLayout вручную без создания формы. Из-за этого я скорее всего пропущу часть кода. Он загружен, но не кажется.Java Swing GUI не выглядит

import java.awt.*; 
import java.awt.event.*; 
import java.io.IOException; 
import java.net.InetAddress; 
import javax.swing.*; 
import javax.swing.border.EmptyBorder; 


class PanelDemo { 

    JButton jbtnUpArrowFirst; 
    JButton jbtnDownArrowFirst; 
    JButton jbtnUpArrowSec; 
    JButton jbtnDownArrowSec; 
    JButton jbtnUpArrowThird; 
    JButton jbtnDownArrowThird; 

    JLabel jlblLedUpFirst; 
    JLabel jlblLedDownFirst; 
    JLabel jlblLedUpSec; 
    JLabel jlblLedDownSec; 
    JLabel jlblLedUpThird; 
    JLabel jlblLedDownThird; 

    private JComponent ui = null; 
    private Insets buttonMargin = new Insets(10,10,10,10); 

    PanelDemo() throws IOException { 

     InitComponents(); 
    } 

    private void InitComponents() { 

     if (ui != null) return; 

     ui = new JPanel(new BorderLayout(4,4)); 
     ui.setBorder(new EmptyBorder(4,4,4,4)); 

     int gap = 5; 


     JPanel jpnl = new JPanel(new GridLayout(2, 4, gap, gap)); 
     jpnl.setBorder(new EmptyBorder(0, 0, 0, 50)); 
     jpnl.setOpaque(true); 
     jpnl.setBorder(
       BorderFactory.createLineBorder(Color.BLUE)); 


     JPanel jpnl2 = new JPanel(new GridLayout(2, 2, gap, gap)); 
     jpnl2.setOpaque(true); 
     jpnl2.setBorder(
       BorderFactory.createLineBorder(Color.RED)); 





     jbtnUpArrowFirst = new JButton("upfirst" ,new ImageIcon("/Users/Jack/Desktop/up.png")); 
     jbtnUpArrowFirst.setVerticalTextPosition(SwingConstants.BOTTOM); 
     jbtnUpArrowFirst.setHorizontalTextPosition(SwingConstants.CENTER); 

     jbtnDownArrowFirst = new JButton("downfirst" ,new ImageIcon("/Users/Jack/Desktop/down.png")); 
     jbtnDownArrowFirst.setVerticalTextPosition(SwingConstants.BOTTOM); 
     jbtnDownArrowFirst.setHorizontalTextPosition(SwingConstants.CENTER); 


     jlblLedUpFirst = new JLabel("upledfirst", new ImageIcon("/Users/Jack/Desktop/ledOff.png"), SwingConstants.CENTER); 
     jlblLedUpFirst.setVerticalTextPosition(SwingConstants.BOTTOM); 
     jlblLedUpFirst.setHorizontalTextPosition(SwingConstants.CENTER); 


     jlblLedDownFirst = new JLabel("downledfirst", new ImageIcon("/Users/Jack/Desktop/ledOff.png"), SwingConstants.CENTER); 
     jlblLedDownFirst.setVerticalTextPosition(SwingConstants.BOTTOM); 
     jlblLedDownFirst.setHorizontalTextPosition(SwingConstants.CENTER); 


     //////////////////////////////////////////////////////////////////////// 
     jbtnUpArrowSec = new JButton("upsec", new ImageIcon("/Users/Jack/Desktop/up.png")); 
     jbtnUpArrowSec.setVerticalTextPosition(SwingConstants.BOTTOM); 
     jbtnUpArrowSec.setHorizontalTextPosition(SwingConstants.CENTER); 

     jbtnDownArrowSec = new JButton("downsec" ,new ImageIcon("/Users/Jack/Desktop/down.png")); 
     jbtnDownArrowSec.setVerticalTextPosition(SwingConstants.BOTTOM); 
     jbtnDownArrowSec.setHorizontalTextPosition(SwingConstants.CENTER); 


     jlblLedUpSec = new JLabel("upledsecond", new ImageIcon("/Users/Jack/Desktop/ledOff.png"), SwingConstants.CENTER); 
     jlblLedUpSec.setVerticalTextPosition(SwingConstants.BOTTOM); 
     jlblLedUpSec.setHorizontalTextPosition(SwingConstants.CENTER); 

     jlblLedDownSec = new JLabel("downledsec", new ImageIcon("/Users/Jack/Desktop/ledOff.png"), SwingConstants.CENTER); 
     jlblLedDownSec.setVerticalTextPosition(SwingConstants.BOTTOM); 
     jlblLedDownSec.setHorizontalTextPosition(SwingConstants.CENTER); 
     //////////////////////////////////////////////////////////////////////// 
     jbtnUpArrowThird = new JButton("upthirt", new ImageIcon("/Users/Jack/Desktop/up.png")); 
     jbtnUpArrowThird.setVerticalTextPosition(SwingConstants.BOTTOM); 
     jbtnUpArrowThird.setHorizontalTextPosition(SwingConstants.CENTER); 

     jbtnDownArrowThird = new JButton("downthird" ,new ImageIcon("/Users/Jack/Desktop/down.png")); 
     jbtnDownArrowThird.setVerticalTextPosition(SwingConstants.BOTTOM); 
     jbtnDownArrowThird.setHorizontalTextPosition(SwingConstants.CENTER); 


     jlblLedUpThird = new JLabel("upledthird", new ImageIcon("/Users/Jack/Desktop/ledOff.png"), SwingConstants.CENTER); 
     jlblLedUpThird.setVerticalTextPosition(SwingConstants.BOTTOM); 
     jlblLedUpThird.setHorizontalTextPosition(SwingConstants.CENTER); 

     jlblLedDownThird = new JLabel("downledthird", new ImageIcon("/Users/Jack/Desktop/ledOff.png"), SwingConstants.CENTER); 
     jlblLedDownThird.setVerticalTextPosition(SwingConstants.BOTTOM); 
     jlblLedDownThird.setHorizontalTextPosition(SwingConstants.CENTER); 


     // Add the buttons and label to the panel. 
     jpnl.add(jbtnUpArrowFirst); 
     jpnl.add(jlblLedUpFirst); 
     jpnl.add(jbtnUpArrowSec); 
     jpnl.add(jlblLedUpSec); 
     jpnl.add(jbtnDownArrowFirst); 
     jpnl.add(jlblLedDownFirst); 
     jpnl.add(jbtnDownArrowSec); 
     jpnl.add(jlblLedDownSec); 

     jpnl2.add(jbtnUpArrowThird); 
     jpnl2.add(jlblLedUpThird); 
     jpnl2.add(jbtnDownArrowThird); 
     jpnl2.add(jlblLedDownThird); 


     ui.add(jpnl, BorderLayout.CENTER); 
     ui.add(jpnl2, BorderLayout.LINE_END); 

     JFrame jfrm = new JFrame("Use Two JPanels"); 
     jfrm.setLocationByPlatform(true); 
     jfrm.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     jfrm.setContentPane(getUI()); 
     jfrm.setMinimumSize(jfrm.getSize()); 
     jfrm.pack(); 
     jfrm.setVisible(true); 

     /*jbtnUpArrowFirst.addActionListener(e -> { 
      try { 
       test.send("ANTSW=VERT\r\n"); 

       //if (test.recv().equalsIgnoreCase("")) 

      } catch (IOException e1) { 
       e1.printStackTrace(); 
      } 
     }); 

     jbtnDownArrowFirst.addActionListener(e -> { 
      try { 
       test.send("ANTSW=HORZ\r\n"); 
      } catch (IOException e1) { 
       e1.printStackTrace(); 
      } 
     });*/ 

    } 

    public JComponent getUI() { 
     return ui; 
    } 

    public static void main(String args[]) { 
     // Create the frame on the event dispatching thread. 
     SwingUtilities.invokeLater(() -> { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
        new PanelDemo(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } catch (IllegalAccessException e) { 
        e.printStackTrace(); 
       } catch (InstantiationException e) { 
        e.printStackTrace(); 
       } catch (UnsupportedLookAndFeelException e) { 
        e.printStackTrace(); 
       } catch (ClassNotFoundException e) { 
        e.printStackTrace(); 
       } 
     }); 
    } 
} 
+0

Не должен ли вы называть «setVisible()» или что-то подобное на вашей панели в какой-то момент? – GhostCat

+0

, но я уже установил видимость для JFrame, зачем мне дополнительно? @GhostCat – swinger

+0

Извините, я упустил часть JFrame. – GhostCat

ответ

4

Вы звоните pack() и setVisible(), прежде чем добавить все компоненты в JFrame. Переместите блок, который делает это до конца конструктора.

Кроме того, мой компилятор не может найти test в любом месте кода, который настраивает прослушиватели действий. Я не работал с Java 8, поэтому я не знаю, что там не так, но Eclipse должен скомпилировать это без ошибок.

+0

@swinger Я вижу, что вы новый пользователь; в SO обычно принято нажимать галочку на ответе, если он отвечает на ваш вопрос, в дополнение к тому, чтобы активировать его, если это полезно. Таким образом, люди знают, что на вопрос ответили, и тот, кто ему ответил, получает кредит. – arcy

+0

Этот код отображает рамку в моей системе. Я вложил его в новый класс в пакете по умолчанию в eclipse, изменил имя класса, чтобы он не противоречил первому из полученных мной вопросов, исправил конструктор и ударил «debug». Он отображает окно с 6 кнопками. Если вы этого не сделаете, это из-за чего-то другого, кроме вашего кода. Если у вас есть ошибки, сообщите нам, что они собой представляют. Это также поможет, если вы укажете, что вы ожидаете, и то, что вы видите, это другое; так как первый пример ничего не отобразил, как только это показало что-то, что я думал, что мы закончили. – arcy

+0

Я не понимаю, почему вы добавили иконки в вопрос. Что вы хотите, чтобы этого не произошло? – arcy