问题
I'm trying to make a GUI based on BorderLayout
and GridLayout
by hand-writing not with a form builder. Because of that, I'm most likely skipping a part in the code. It is loaded but not seem.
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();
}
});
}
}
回答1:
You are calling pack()
and setVisible()
before you add all the components to the JFrame. Move the block that does that to the end of the constructor.
In addition, my compiler cannot find test
anywhere in the code that is setting up action listeners. I haven't worked with Java 8, so I don't know what's wrong there, but Eclipse should be able to compile this without errors.
来源:https://stackoverflow.com/questions/38738784/java-swing-gui-doesnt-seem