0
如附件屏幕截圖所示 - 黃線來自底層的BoxLayout
,面向JPanel
。更改爲BorderLayout
刪除黃線:BoxLayout在底部留下像素線
代碼示例如下:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.WindowConstants;
public class FrameDemo {
private String[] suits = {"hearts", "spades", "diamonds", "clubs", "joker"};
public static void main(String[] args) {
new FrameDemo();
}
public FrameDemo() {
JFrame mainframe = new JFrame();
mainframe.setPreferredSize(new Dimension(800, 600));
mainframe.setLocationByPlatform(true);
mainframe.setTitle("Playing Card Game! v0.1");
mainframe.getContentPane().setLayout(new BorderLayout());
JPanel top = new JPanel();
top.setBackground(Color.BLUE);
top.setPreferredSize(new Dimension(800, 50));
JPanel left = new JPanel();
left.setBackground(Color.RED);
left.setPreferredSize(new Dimension(50, 500));
JPanel centre = new JPanel();
centre.setBackground(Color.YELLOW);
centre.setLayout(new BoxLayout(centre, BoxLayout.Y_AXIS));
JPanel right = new JPanel();
right.setBackground(Color.GREEN);
right.setPreferredSize(new Dimension(50, 500));
JPanel bot = new JPanel();
bot.setBackground(Color.GRAY);
bot.setPreferredSize(new Dimension(800, 50));
for(String suit : suits) {
if(!(suit.equals("joker"))) {
JPanel layer = new JPanel();
layer.setLayout(new FlowLayout(FlowLayout.LEFT, 10, 10));
layer.setBackground(Color.BLACK);
centre.add(layer);
}
}
mainframe.add(top, BorderLayout.NORTH);
mainframe.add(left, BorderLayout.WEST);
mainframe.add(centre, BorderLayout.CENTER);
mainframe.add(right, BorderLayout.EAST);
mainframe.add(bot, BorderLayout.SOUTH);
mainframe.setDefaultCloseOperation(
WindowConstants.DO_NOTHING_ON_CLOSE);
mainframe.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
mainframe.pack();
mainframe.setVisible(true);
}
}
我試過在Color.BLACK
JPanels設置邊界,但它似乎並沒有做太多。 Swing爲什麼要這樣做?它可以修復嗎?
備註:無論我是否使用setPreferredSize()
,它都會顯示。
我會理解是否有舍入誤差,但數字全部除以10.我可以理解,如果這是剩餘的數量,但它實際上是1像素深。感謝代碼,我會考慮它。我對這種明顯的差異感到惱火。如果沒有其他人提出任何問題,將會標記爲已回答:) – Gorbles
@gorb,請參閱編輯。 – camickr
輝煌,固定。從現在起將銘記這一點! – Gorbles