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. actionscriptのテキストで塗りつぶしを作成する3
- 4. ggplot:geom_polygon内にグラデーションの塗りつぶしを作成する方法
- 5. ツリーノード変数から配列と塗りつぶしを作成する方法
- 6. 完全なページを塗りつぶすテーブルを作る方法
- 7. UWP XamlでNxNグリッドを作成して塗りつぶし
- 8. ListBoxを作成して親コンテナの幅を塗りつぶす
- 9. ゼロで塗りつぶし
- 10. イメージでテキストを塗りつぶす方法。スケール&センター(垂直と水平)?
- 11. 停止塗りつぶし方法でのちらつき
- 12. フィールドを塗りつぶし
- 13. toolStripDropDownButtonを塗りつぶし
- 14. css3で列数の塗りつぶし行を最初に作る方法は?
- 15. iFrameを黒で塗りつぶす方法とsrcなし
- 16. SQL Server 2008の自動データベースドロップ、作成と塗りつぶし
- 17. 塗りつぶし楕円
- 18. 塗りつぶしプログラム
- 19. 塗りつぶしマップ - java
- 20. スプライングラフグラデーション塗りつぶし
- 21. itext塗りつぶしテーブル
- 22. Cでタイル画像で塗りつぶしたポリゴンを作成する#
- 23. Ruby/Glade 3のコンボボックスの使い方/塗りつぶし方法
- 24. インデックスを再作成するときの塗りつぶし方法の機能は何ですか?
- 25. matplotlibのカスタムハッチでポリゴンを塗りつぶす方法は?
- 26. MessageCollectionでリストオブジェクトを塗りつぶすためのスマートな方法
- 27. ITextSharpで塗りつぶし可能なPDFフォームを作成する
- 28. xlsxwriterを使用して塗りつぶす方法
- 29. C#で長方形の塗りつぶしをクリアする方法は?
- 30. Android:TextViewsでギャラリーを塗りつぶし
私は、問題のイメージがスペースを占有するのに十分な大きさであることを願っています。してください、これを見てください[例](http://stackoverflow.com/a/11372350/1057230) –
はいイメージは合理的に十分に小さい、小さなアイコンや何かではありません。 –
サンプルコードがありますか? – MadProgrammer