IveはJFrameを取得し、LayoutManagerをBorderLayoutに設定してから、JLabelにイメージを追加します。しかし、フレームのサイズを変更すると、JLabelのサイズが変更されません。私は北、S、Eなどにコンポーネントを追加していません。ラベルの中のイメージをフレーム全体に塗りつぶして、私のメニューをそのままタクトに残すことを望んでいました。イメージの塗りつぶしでJLabelを作成する方法BorderLayout.CENTER
答えて
これは傲慢だと私に許してもらえますが、私は何も進んでいません。
私は、迅速なサンプル
はそれがJLabel
の国境だ、画像の周りに赤い線を参照してくださいでした。ご覧のように、ラベルは領域全体を埋めるようにサイズ変更されています。 );
この
は私が明らかにサンプルpublic class LayoutFrame extends JFrame {
public LayoutFrame() throws HeadlessException {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Image image = null;
URL url = getClass().getResource("/layout/issue78.jpg");
try {
image = ImageIO.read(url);
} catch (IOException ex) {
ex.printStackTrace();
}
JLabel label = new JLabel(new ImageIcon(image));
label.setHorizontalAlignment(JLabel.CENTER);
label.setVerticalAlignment(JLabel.CENTER);
label.setBorder(new LineBorder(Color.RED, 4));
setLayout(new BorderLayout());
add(label);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException ex) {
} catch (InstantiationException ex) {
} catch (IllegalAccessException ex) {
} catch (UnsupportedLookAndFeelException ex) {
}
LayoutFrame frame = new LayoutFrame();
frame.setSize(200, 200);
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
});
}
}
を生成するために使用されるコードであり、あなたがあなた自身のイメージを供給する必要があります。
あなたの目標であれば、ラベルはコンテンツの縮尺を調整しませんので、これを達成するには独自のコンポーネントを実装する必要があります。
まだ問題が解決しない場合は、あなたのラベルがコンテナ内にないか、コンテナレイアウトマネージャーがあなたの考えではないことを示唆しています。
UPDATE
あなたがメニューで行方不明に行くのコンポーネントの問題や問題を抱えている理由を私は知りません。重量と軽量の成分を混合していますか?もう少し近くにあなたの質問を読んだ後、メニューバー
と
サンプル、私は簡単なサイズ変更画像ペインのサンプルを考案しました。スピードに関しては、
public class ImagePane extends JPanel {
protected static final Object RESIZE_LOCK = new Object();
private BufferedImage image;
private BufferedImage scaledImage;
private Timer resizeTimer;
public ImagePane() {
URL url = getClass().getResource("/layout/issue78.jpg");
try {
image = ImageIO.read(url);
} catch (IOException ex) {
ex.printStackTrace();
}
resizeTimer = new Timer(250, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// Simple thread factory to start a slightly lower
// priority thread.
CoreThreadFactory.getUIInstance().execute(new ResizeTask());
}
});
resizeTimer.setCoalesce(true);
resizeTimer.setRepeats(false);
}
@Override
public void setBounds(int x, int y, int width, int height) {
super.setBounds(x, y, width, height);
resizeTimer.restart();
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
if (scaledImage != null) {
// This simply returns a rectangle that takes into consideration
//the containers insets
Rectangle safeBounds = UIUtilities.getSafeBounds(this);
System.out.println("scaledImage = " + scaledImage.getWidth() + "x" + scaledImage.getWidth());
int x = ((safeBounds.width - scaledImage.getWidth())/2) + safeBounds.x;
int y = ((safeBounds.height - scaledImage.getHeight())/2) + safeBounds.y;
g2d.drawImage(scaledImage, x, y, this);
}
}
protected class ResizeTask implements Runnable {
@Override
public void run() {
synchronized (RESIZE_LOCK) {
if (image != null) {
int width = getWidth();
int height = getHeight();
System.out.println("width = " + width);
System.out.println("height = " + height);
// A simple divide and conquer resize implementation
// this will scale the image so that it will fit within
// the supplied bounds
scaledImage = ImageUtilities.getScaledInstanceToFit(image, new Dimension(width, height), ImageUtilities.RenderQuality.High);
System.out.println("scaledImage = " + scaledImage.getWidth() + "x" + scaledImage.getWidth());
repaint(); // this is one of the few thread safe calls
}
}
}
}
}
サンプルのthanx。問題は、メニューのようにすべてのものを取り込み、他のコンポーネントが失われてしまうことです。あなたは正しいです、私の問題は、ラベルが痛みのどの部分の中にiconimageのサイズを変更していないということです。 –
それはあなたのメニューに影響してはいけません:P – MadProgrammer
@trashgod OPの知識のレベルを知らずに、私は謙虚に聞こえたくはありませんでしたが、何が試されたのか分かりませんでした。基本:P – MadProgrammer
ベストオプションは、サブクラスのイメージアイコンにあると単純にペイントするそのpaintIconメソッドをオーバーライドし、私の呼び出しの代わりに、私は自分のライブラリに頼ってきましたが、それはあなた自身のコードの実装に合理的に簡単にする必要がありますGraphics.paint(x、y、width、height ...)を使用してイメージを作成します。
おそらく不正なアイコンの実装です。getIconWidth/Heightは、iconの**固定幅**を指定する_an intを返すようにdoc'edされています - その場でサイズ変更することはできません。 – kleopatra
IMHO私はあなたと思いますベースライン 'Icon'をとり、あなたのために必要なサイズの新しい' Icon'を生成するか、またはあなたのためにペイントすることができる何らかの 'Factory'でもっとうまくいきます。ただし、スケーリング操作が相当な場合(元の画像のサイズに応じて、0.1%または数百%に縮小するなど)、「EDT」を「停止」する危険性があります。私の例が示すように、リサイズ要求には「合体」アプローチを使用し、すべてのリクエストでリサイズするのではなく、通常は「アイドル」状態になると、できるだけ少ないリクエストでリサイズを試みます。しかしMHO – MadProgrammer
@madProgrammer元のqをひどく言い訳して申し訳ありませんが、アイコン内の画像のサイズを変更したくありません。私は親コンポーネントを塗りつぶすためにイメージを伸ばすだけです。私はこの悪い言い回しがおそらくあなたの応答をねじ込んだことを知っていますが、私はなぜ私がやったことを試みたのかを願っています。 –
- 1. イメージをフルスクリーンで塗りつぶす方法
- 2. パターンでイメージを塗りつぶす方法
- 3. ブートストラップグリッドシステムの塗りつぶしイメージ
- 4. actionscriptのテキストで塗りつぶしを作成する3
- 5. ggplot:geom_polygon内にグラデーションの塗りつぶしを作成する方法
- 6. バビロンJSのカスタムポイントから塗りつぶした形を作成する方法
- 7. Objective-C:塗りつぶしなしのボタンを作成する
- 8. GridView Asyncを塗りつぶす方法
- 9. ツリーノード変数から配列と塗りつぶしを作成する方法
- 10. テキストエリアの塗りつぶしテーブルセルを作成する
- 11. 完全なページを塗りつぶすテーブルを作る方法
- 12. UWP XamlでNxNグリッドを作成して塗りつぶし
- 13. 親にdiv塗りつぶし空白を作成する
- 14. アグリゲーション関連の塗りつぶしを「塗りつぶし」に変更する方法
- 15. ListBoxを作成して親コンテナの幅を塗りつぶす
- 16. テキストで塗りつぶされた矩形を作成する
- 17. Line2Dで作成された塗りつぶしの形の色
- 18. PyPNGモジュールで塗りつぶし画像を作成
- 19. MATLABマップを塗りつぶし領域で作成
- 20. 線分で塗りつぶし輪郭を作成
- 21. angularJsで塗りつぶし
- 22. ゼロで塗りつぶし
- 23. Laravel 5.1で塗りつぶし入力をチェックする方法
- 24. DataGridView c#、新しいカスタムの "塗りつぶし"メソッドを作成
- 25. イメージでテキストを塗りつぶす方法。スケール&センター(垂直と水平)?
- 26. d3スタイルの塗りつぶしが奇妙な方法で塗りつぶされています
- 27. 停止塗りつぶし方法でのちらつき
- 28. セル塗りつぶしの色を取得する方法
- 29. 条件付きでボロノイセグメントの塗りつぶし/塗りつぶし
- 30. mapscript上でpixmapイメージでポリゴンを塗りつぶす
私は、問題のイメージがスペースを占有するのに十分な大きさであることを願っています。してください、これを見てください[例](http://stackoverflow.com/a/11372350/1057230) –
はいイメージは合理的に十分に小さい、小さなアイコンや何かではありません。 –
サンプルコードがありますか? – MadProgrammer