如何在java中正确打包组件?
1。需要设置1024*768组件区域的大小 2.需要在(0,0,13661024)上设置线的绘图方向,但不设置中心 我试图在getPreferredSize()方法中更改大小,但这无助于我或做其他效果。我不能这样做。 我试图在getPreferredSize()方法中更改大小,但这无助于我或做其他效果。 我试着改变 这是我无法根据需要更改的代码如何在java中正确打包组件?,java,swing,Java,Swing,1。需要设置1024*768组件区域的大小 2.需要在(0,0,13661024)上设置线的绘图方向,但不设置中心 我试图在getPreferredSize()方法中更改大小,但这无助于我或做其他效果。我不能这样做。 我试图在getPreferredSize()方法中更改大小,但这无助于我或做其他效果。 我试着改变 这是我无法根据需要更改的代码 package j; import java.awt.BasicStroke; import java.awt.BorderLayout; impor
package j;
import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridBagLayout;
import java.awt.RenderingHints;
import java.awt.geom.Path2D;
import javax.swing.JColorChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class Letter {
LetterDraw letterDraw = new LetterDraw();
public Letter() {
JFrame frame = new JFrame();
JPanel letterDrawWrapper = new JPanel(new GridBagLayout());
letterDrawWrapper.add(letterDraw);
letterDrawWrapper.setSize(1024,760);
frame.add(createColorChooser(), BorderLayout.PAGE_END);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setSize(111, 111);
frame.setVisible(true);
}
private JColorChooser createColorChooser() {
JColorChooser colorChooser = new JColorChooser();
colorChooser.getSelectionModel().addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
letterDraw.setColor(colorChooser.getColor());
}
});
return colorChooser;
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new Letter();
}
});
}
}
class LetterDraw extends JPanel {
private Color color;
public void setColor(Color color) {
this.color = color;
repaint();
}
@Override
protected void paintComponent(Graphics graphics) {
super.paintComponent(graphics);
Graphics2D g = (Graphics2D) graphics;
g.setColor(color);
g.setRenderingHint(
RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g.setStroke(new BasicStroke(3));
//g.setStroke(new BasicStroke(4, BasicStroke.JOIN_BEVEL, 0));
g.setColor(color);
g.drawLine(11,11,1024,1024);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(150, 150);
}
}```
这是我无法根据需要更改的代码
package j;
import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridBagLayout;
import java.awt.RenderingHints;
import java.awt.geom.Path2D;
import javax.swing.JColorChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class Letter {
LetterDraw letterDraw = new LetterDraw();
public Letter() {
JFrame frame = new JFrame();
JPanel letterDrawWrapper = new JPanel(new GridBagLayout());
letterDrawWrapper.add(letterDraw);
letterDrawWrapper.setSize(1024,760);
frame.add(createColorChooser(), BorderLayout.PAGE_END);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setSize(111, 111);
frame.setVisible(true);
}
private JColorChooser createColorChooser() {
JColorChooser colorChooser = new JColorChooser();
colorChooser.getSelectionModel().addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
letterDraw.setColor(colorChooser.getColor());
}
});
return colorChooser;
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new Letter();
}
});
}
}
class LetterDraw extends JPanel {
private Color color;
public void setColor(Color color) {
this.color = color;
repaint();
}
@Override
protected void paintComponent(Graphics graphics) {
super.paintComponent(graphics);
Graphics2D g = (Graphics2D) graphics;
g.setColor(color);
g.setRenderingHint(
RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g.setStroke(new BasicStroke(3));
//g.setStroke(new BasicStroke(4, BasicStroke.JOIN_BEVEL, 0));
g.setColor(color);
g.drawLine(11,11,1024,1024);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(150, 150);
}
}```
需要设置1024*768组件区域的大小
您不应该硬编码大小值。你不知道解决方案是什么
此外,屏幕的分辨率不是可用于绘制的空间。框架有一个标题栏和边框,它占用了定制绘画的空间
绘制代码应该是动态的,取决于面板的可用空间,因此绘制代码将使用getWidth()
和getHeight()
等方法来确定绘制区域
我尝试更改getPreferredSize()中的大小
是的,这将为首选尺寸提供建议。然后你就把框架打包。不要在框架上使用setSize()
//frame.setSize(111, 111);
该语句正在重写由pack()方法确定的大小。摆脱它
g.drawLine(11,11,1024,1024);
不要硬编码值。面板的大小将随着框架大小的改变而改变。例如,要在面板上绘制对角线,代码应为:
g.drawLine(0, 0, getWidth(), getHeight());
尝试手动调整框架的大小,以查看线的大小如何变化
编辑:
您没有将面板添加到框架:
frame.add(letterDraw);
好的。但是我应该在哪里插入这个,请给我举个例子。谢谢。
g.drawLine(0,0,getWidth(),getHeight())代码>线从未绘制过。。。我已手动调整了框架的大小)。请再帮我一次!对不起,我错过了一个。如何不使用getHeigth()等手动设置所有帧大小…我不理解你的最后一个问题。不设置帧大小(这就是为什么需要删除setSize(…)语句)。添加到框架中的每个构件都有一个首选尺寸。当您pack()
安装框架时,每个组件的首选尺寸将用于确定框架尺寸。