Java 如何将JButton移动到JPanel的右侧?
对于编程类,我被要求创建iCalendar应用程序的副本。我用JAVA编写代码,用JFrame和JPanel绘制。以下是我的问题:Java 如何将JButton移动到JPanel的右侧?,java,swing,user-interface,jpanel,jbutton,Java,Swing,User Interface,Jpanel,Jbutton,对于编程类,我被要求创建iCalendar应用程序的副本。我用JAVA编写代码,用JFrame和JPanel绘制。以下是我的问题: import java.awt.*; import javax.swing.*; public class Mainie extends JFrame { private JButton back = new TriangleButton(true), front = new TriangleButton(false);
import java.awt.*;
import javax.swing.*;
public class Mainie extends JFrame {
private JButton back = new TriangleButton(true),
front = new TriangleButton(false);
public Mainie(){
super();
setSize(800, 400);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JPanel months = new JPanel();
final JPanel days = new JPanel();
JLabel one = new JLabel("Hallo");
one.setHorizontalAlignment(JLabel.CENTER);
back.setHorizontalAlignment(SwingConstants.LEFT);
front.setHorizontalAlignment(SwingConstants.RIGHT);
months.setLayout(new BorderLayout());
months.add(back, BorderLayout.WEST);
months.add(one, BorderLayout.CENTER);
months.add(front, BorderLayout.EAST);
days.setLayout(new GridLayout(1,1));
days.add(new JButton("Meister Camickr"));
months.setAlignmentX(CENTER_ALIGNMENT);
add(months, BorderLayout.NORTH);
add(days, BorderLayout.CENTER);
setVisible(true);
}
public static void main(String[] args){
new Mainie();
}
}
class TriangleButton extends JButton {
private Shape triangle = createTriangle();
public void paintBorder(Graphics g) {
((Graphics2D) g).draw(triangle);
}
public void paintComponent(Graphics g) {
((Graphics2D) g).fill(triangle);
}
public Dimension getPreferredSize() {
return new Dimension(200, 100);
}
public boolean contains(int x, int y) {
return triangle.contains(x, y);
}
public TriangleButton(boolean pointLeft) {
super();
if (!pointLeft)
this.triangle = createRTriangle();
}
private Shape createTriangle() {
Polygon p = new Polygon();
p.addPoint(0, 20);
p.addPoint(20, 0);
p.addPoint(20, 40);
return p;
}
private Shape createRTriangle() {
Polygon p = new Polygon();
p.addPoint(20, 20);
p.addPoint(0, 0);
p.addPoint(0, 40);
return p;
}
}
如果你编译这个,你会发现我的JButton太偏左了。如何将其移到右侧?这些按钮的基本问题是按钮太宽,视觉指示器在左侧。在它们周围加上一个边框,它就会变得很明显 OTOH我将使用一种完全不同的方法,为按钮使用文本,并使用工厂方法使它们看起来像预期的那样
问题是你随机选择的大小并不代表三角形的真实大小 您可以执行以下操作:
public Dimension getPreferredSize() {
//return new Dimension(200, 100);
Rectangle bounds = triangle.getBounds();
return new Dimension(bounds.width, bounds.height);
}
您仍然存在其他问题,因为您仍然会有绘画瑕疵。重写该方法时,应始终调用super.paintComponent():
public void paintComponent(Graphics g) {
super.paintComponent(g);
((Graphics2D) g).fill(triangle);
}
但是,这仍然不起作用,因为按钮也可以进行其他绘制。因此,真正的问题是,您不应该尝试对按钮进行自定义绘制。您真正想要做的是自定义绘制图标
。然后,您可以将图标添加到按钮
你可能想退房。您可以使用ShapeIcon
类创建图标。这将提供一个更灵活的解决方案,因为我想并非所有形状都由ascii字符表示
public void paintComponent(Graphics g) {
super.paintComponent(g);
((Graphics2D) g).fill(triangle);
}