我想讓我的兩個參數構造函數能夠接受兩個參數,然後爲我設置JComponent的大小。當我這樣做時,我收到錯誤。爲什麼會是這種情況。我重寫了方法,並調用setSize方法從setSize的大小,但我認爲它會導致一個迭代的遞歸調用的stackoverflow。設置自定義組件的大小不工作?
如何在我的個人組件中實現setSize(...),以便我可以讓某人設置組件的大小?
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JComponent;
public class MyComponent extends JComponent {
private static final long serialVersionUID = 1L;
MyComponent() {
super();
}
MyComponent(int x, int y) {
Dimension d = new Dimension(x,y);
this.setSize(d);
}
@Override
public void setSize(Dimension d) {
setSize(d);
}
// @Override
// public void setSize(int x, int y) {
// Dimension d = new Dimension(x,y);
// setSize(d);
// }
@Override
public Dimension getSize() {
return this.getSize();
}
@Override
public void setPreferredSize(Dimension d) {
this.setPreferredSize(d);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(100, 25);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawLine(10, 10, 100, 100);
}
public void paintBorder(Graphics g) {
super.paintBorder(g);
g.setColor(Color.YELLOW);
g.fillRect(0, 0, 50, 50);
g.setColor(Color.BLACK);
g.drawRect(0, 0, 50, 50);
}
public void paint(Graphics g) {
super.paint(g);
paintComponent(g);
paintBorder(g);
paintChildren(g);
}
}
}
錯誤:
Exception in thread "main" java.lang.StackOverflowError
at testpak.MyComponent.setSize(MyComponent.java:23)
at testpak.MyComponent.setSize(MyComponent.java:23)
at testpak.MyComponent.setSize(MyComponent.java:23)
at testpak.MyComponent.setSize(MyComponent.java:23)
at testpak.MyComponent.setSize(MyComponent.java:23)
...etc...
// \t @覆蓋 // \t公共無效的setSize(INT X,int y)對{// \t \t super.setSize(新尺寸(X ,Y)); // \t} \t \t這是一個給我一個錯誤。在testpak.MyComponent.setSize在(MyComponent.java:28) \t在java.awt.Component.resize(Component.java:2195) \t在java.awt.Component.setSize(Component.java:2186) \t testpak.MyComponent.setSize(MyComponent.java:28) \t at java.awt.Component.resize(Component.java:2195) –
您是否有鏈接顯示已創建的JComponent,它確實很好? –
@Doug Swing很棒,但它有一個很大的學習曲線。查看Swing教程http://docs.oracle.com/javase/tutorial/uiswing/。您的問題涵蓋了在容器中佈置組件,但您應該完成整個過程。它會最終節省你的時間和很多挫折。 – Steve11235