我试图在JPanel中表示一个给定的数学函数,因为现在我只有轴,但是轴没有绘制,我不知道为什么,顺便说一下,如果我在框架中调用< code>new Axis(),它会绘制。
主要类别
public class MyClass{
final static int HEIGHT = 400;
final static int WIDTH = 400;
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setSize(WIDTH,HEIGHT);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setPanel(frame);
frame.setVisible(true);
}
static void setPanel(JFrame frame) {
JPanel panel = new JPanel();
panel.setBackground(Color.GRAY);
panel.add(new Axis());
frame.add(panel);
}
}
轴类
@SuppressWarnings("serial")
public class Axis extends JComponent{
static final int LONG_AXIS = 150;
public void paintComponent(Graphics g) {
int CenterX = getWidth()/2;
int CenterY = getHeight()/2;
g.setColor(Color.BLACK);
//x axis line
g.drawLine(CenterX - LONG_AXIS, CenterY, CenterX + LONG_AXIS, CenterY);
//y axis line
g.drawLine(CenterX, CenterY - LONG_AXIS, CenterX, CenterY + LONG_AXIS);
}
}
另一个问题:有可能有多种绘画方法吗?
运行时,检查Axis对象的大小,您可能会发现其大小为[0,0]或[1,1],因为您将其添加到默认使用FlowLayout的JPanel中,因此不会导致Axis展开,Axis的默认首选大小为[0,0]。
考虑重写Axis组件的getPreferredSize()
方法以返回一个合理的维度,或者让其包含的JPanel使用BorderLayout并添加BorderLayout。居中,或两者都做。
此外,不要忘记在重写中调用超级的paintComponent方法。
关于
好的,我的意思是如果这是一个好的实践,例如一个绘制轴的方法,和另一个绘制数学函数的方法
考虑创建 paintComponent(...)
为上述每个步骤调用的方法。如果复杂,可以将其委托给绘图组件包含的非组件对象,然后再次调用 paintComponent 。
此外,图像的静态部分,即x轴和y轴最好绘制到BufferedImage,然后通过< code>g.drawImage(....)
我最近需要在一个JScrollPane的viewport视图中放置几个组件,其中包括一个JTextPane。 我将所有组件(两个JPanel和JTextPane)放在另一个JPanel中,这个JPanel有一个BorderLayout LayoutManager,并将该JPanel设置为ScrollPane的viewport视图。 我立即注意到: JTextPane不再根据JScrollPane的
问题内容: 我如何告诉paint方法仅在JPanel上而不是在整个JFrame上绘制背景。我的JFrame大小大于JPanel。当我尝试为JPanel绘制网格背景时,网格似乎遍及整个JFrame,而不仅仅是JPanel。 以下是部分代码: 问题答案: camickr是正确的。所以: 您需要严格将工程图与不同组件分开。Swing已经在管理子组件,因此绝对不需要在Panel的Frame中实现图形(调用
问题内容: 我正在用Java编写的Paint应用程序上工作,并 遇到了一些(更多)问题。我有一个gui和一个工作程序(kinda),我唯一的问题是 用户绘制的线条和图形没有保存(在 绘制下一个图形后消失)。 从过去的问题中,我了解到我将需要使用BufferedImage来 存储图形,然后在我的绘画类中绘画它。 我的问题是,任何人都可以提供有关如何使用 缓冲图像来存储和绘制图形的基本解释/示例,以及
问题内容: 我如何获得JPanel所在的JFrame? 我当前的解决方案是询问面板的父面板(依此类推),直到找到Window: 标准库中有没有一种更优雅的方法? 问题答案: 您可以使用 将返回可转换为顶级类型的Window的方法。
我有JPanel,它包含: JButton和JLabel,其中设置了图片 我想把按钮放在JLabel顶部的北中心位置。目前它的设置彼此相邻,我不知道如何覆盖JLabel。 我在这里尝试了许多解决方案,但是它似乎并不完全按照我想要的方式工作。谢谢! 更新:按钮放在JLabel的顶部,但不在里面。
我在JScrollPane中有一个JPanel,JScrollPane嵌套在其他容器中。我的JPanel在这个问题中使用了SO user jxd中修改过的FlowLayout。 这可能是信息过火,但所讨论的面板的完整嵌套如下所示: JPanel(ModifiedFlowLayout)>JScrollPane>JPanel(GridBagLayout)>JTabbedPane>JPanel(Grid